package br.fabrica.ui.dialog;

import br.fabrica.classes.Produto;
import br.fabrica.classes.ProdutoEstoque;
import br.fabrica.classes.ProdutoListaCompras;
import br.fabrica.classes.Tipo;
import br.fabrica.conexoes.ConexaoInfo;
import com.sun.lwuit.ComboBox;
import com.sun.lwuit.Command;
import com.sun.lwuit.Component;
import com.sun.lwuit.Container;
import com.sun.lwuit.Dialog;
import com.sun.lwuit.Label;
import com.sun.lwuit.TextArea;
import com.sun.lwuit.TextField;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;
import com.sun.lwuit.geom.Dimension;
import com.sun.lwuit.layouts.BoxLayout;
import com.sun.lwuit.layouts.FlowLayout;

public class DialogDetalhesProdutos extends Dialog implements ActionListener{
	
	public static final int ADICIONAR= 0;
	public static final int EDITAR= 1;
	
	private static DialogDetalhesProdutos instance;
	private Label lbProdutos;
	private Label lbPreco;
	private Label lbQtde, lbDescricao;
	private static ComboBox cbProdutos;
	private Container ctQtde;
	private  TextField tfQtde;
	private TextArea taDesc;
	private static Command cmCancel, cmAdd_Edit;
	private static int requisicao_atual;
	private static ProdutoEstoque produtoEstoqueAtual, produtoEstoqueAux;
	private static ProdutoListaCompras produtoAtual, produtoAux;

	private DialogDetalhesProdutos(int requisicao){
		super("Detalhes do Produto");
		
		requisicao_atual = requisicao;
		
		setLayout(new BoxLayout(BoxLayout.Y_AXIS));
		
		lbProdutos = new Label("Produto");
		cbProdutos = new ComboBox();
		cbProdutos.addActionListener(this);
		
		lbPreco = new Label("Preco: R$");
		
		ctQtde = new Container();
		ctQtde.setLayout(new FlowLayout(Component.LEFT));
			lbQtde = new Label("Qtde: ");
			tfQtde = new TextField(4);
			tfQtde.setInputMode("123");
			
			ctQtde.addComponent(lbQtde);
			ctQtde.addComponent(tfQtde);
		
		lbDescricao = new Label("Descricao");

		taDesc = new TextArea();
		taDesc.setEditable(false);
		taDesc.setScrollSize(new Dimension(6,4));
		
		addComponent(lbProdutos);
		addComponent(cbProdutos);
		addComponent(lbPreco);
		addComponent(ctQtde);
		addComponent(lbDescricao);
		addComponent(taDesc);
		
		cmCancel = new Command("Cancelar");
		addCommand(cmCancel);
		
		setCommandListener(this);
	}
	
	public static DialogDetalhesProdutos getInstance(int requisicao){
		requisicao_atual= requisicao;
		if(requisicao == ADICIONAR){
			cmAdd_Edit = new Command("Adicionar Produto");
		}else if(requisicao == EDITAR){
			cmAdd_Edit = new Command("Alterar Produto");
		}
		
		if(instance == null){
			instance = new DialogDetalhesProdutos(requisicao);
		}
		
		produtoEstoqueAtual = produtoEstoqueAux = (ProdutoEstoque) cbProdutos.getSelectedItem();
		
		instance.removeAllCommands();
		instance.refreshTheme();
		instance.addCommand(cmCancel);
		instance.addCommand(cmAdd_Edit);
		return instance;
	}
	
	public void setTipo(Tipo t){
		removeComponent(cbProdutos);
		cbProdutos = new ComboBox(ConexaoInfo.getInstance().getListaNomeProdutos());
		cbProdutos.setSelectedIndex(0);
		if(cbProdutos.getSelectedItem() != null)
			setDetalhes((ProdutoEstoque) cbProdutos.getSelectedItem());
		cbProdutos.addActionListener(this);
		addComponent(1,cbProdutos);
	}
	
	public void setDetalhes(ProdutoEstoque p){
		produtoEstoqueAtual = p;
		produtoAux = produtoAtual;
		lbPreco.setText("R$: "+ p.getPreco());
		tfQtde.setText("1");
		taDesc.setText(p.getDescricao());
	}
	
	public void setDetalhes(ProdutoListaCompras p){
		produtoAtual = produtoAux = p;
		lbPreco.setText("R$: "+ p.getPreco());
		tfQtde.setText(String.valueOf(p.getQtde()));
		taDesc.setText(p.getDescricao());
	}
	
	public void actionPerformed(ActionEvent ae){
		if(ae.getSource().equals(cmAdd_Edit)){
			if(requisicao_atual == ADICIONAR){
				produtoAtual = new ProdutoListaCompras(produtoEstoqueAtual.getId(), produtoEstoqueAtual.getNome(), produtoEstoqueAtual.getFabricante(), produtoEstoqueAtual.getCategoria(), produtoEstoqueAtual.getDescricao(), produtoEstoqueAtual.getPreco(), produtoEstoqueAtual.getTipo());
				produtoAtual.setQtde(Integer.parseInt(tfQtde.getText()));
				ConexaoInfo.getInstance().getListaCompras().addProduto(produtoAtual, Integer.parseInt(tfQtde.getText()));
				DialogWarning msg = new DialogWarning("Adicionar produto", "Produto adicionado com sucesso!");
				msg.show();
				msg= null;
			}else if(requisicao_atual == EDITAR){
				if(cbProdutos.getSelectedItem().toString().equals(produtoEstoqueAux.toString())){
					produtoAtual.setQtde(Integer.parseInt(tfQtde.getText()));
					ConexaoInfo.getInstance().getListaCompras().atualizarProduto(produtoAtual);
				}else{
					produtoAtual = new ProdutoListaCompras(produtoEstoqueAtual.getId(), produtoEstoqueAtual.getNome(), produtoEstoqueAtual.getFabricante(), produtoEstoqueAtual.getCategoria(), produtoEstoqueAtual.getDescricao(), produtoEstoqueAtual.getPreco(), produtoEstoqueAtual.getTipo());
					produtoAtual.setQtde(Integer.parseInt(tfQtde.getText()));
					ConexaoInfo.getInstance().getListaCompras().substituirProduto(produtoAux, produtoAtual);
				}
				
				DialogWarning msg = new DialogWarning("Alterar produto", "Produto alterado com sucesso!");
				msg.show();
				msg= null;
			}
		}else if(ae.getSource().equals(cbProdutos)){
				setDetalhes((ProdutoEstoque) cbProdutos.getSelectedItem());
		}
	}

}